SimpleTC 実績値計算3
2025/02/14
hh:mm-hh:mm (m) #プロジェクト名 タスク名 プロジェクト名とタスク名の位置は前後する
リスト対応
Obsidian
カーソル位置をキープ
ActualTime.md
code:js
<%*
function formatTasks(text) {
const taskRegex = /^(-\s+)?(\d{2}:\d{2})-(\d{2}:\d{2})(\s\((\d+(:\d{2})?)\))?\s(.*)$/gm;
function calculateDuration(startTime, endTime) {
const startHour, startMinute = startTime.split(':').map(Number);
const endHour, endMinute = endTime.split(':').map(Number);
let durationMinutes = (endHour * 60 + endMinute) - (startHour * 60 + startMinute);
if (durationMinutes < 0) {
durationMinutes += 24 * 60; // 翌日にまたがる場合
}
return durationMinutes;
}
return text.replace(taskRegex, (match, prefix, startTime, endTime, _existing, _1, _2, taskDescription) => {
const duration = (${calculateDuration(startTime, endTime)});
const formatted_prefix = prefix ? prefix || "" : "";
return ${formatted_prefix}${startTime}-${endTime} ${duration} ${taskDescription};
});
}
const editor = app.workspace.activeLeaf.view.editor;
// 現在のカーソル行を取得
const cursorLine = editor.getCursor().line;
// 現在のファイル内容を取得
const text = tp.file.content;
// 実績時間を追加
const result = formatTasks(text);
// 現在のファイル内容を上書き
editor.setValue(result);
// カーソル位置を戻す
const currentLineText = editor.getLine(cursorLine);
const cursorPosition = currentLineText.length;
editor.setCursor({ line: cursorLine, ch: cursorPosition });
%>
1Writer
拡張キーボードには登録しない(拡張キーボードから実行す納品確認と、カーソル位置が常に最後尾に移動してしまい、元の位置に戻すのが面倒なため)
code:SimpleTC 実績時間出力 (m).js
function formatTasks(text) {
const taskRegex = /^(-\s+)?(\d{2}:\d{2})-(\d{2}:\d{2})(\s\((\d+(:\d{2})?)\))?\s(.*)$/gm;
function calculateDuration(startTime, endTime) {
const startHour, startMinute = startTime.split(':').map(Number);
const endHour, endMinute = endTime.split(':').map(Number);
let durationMinutes = (endHour * 60 + endMinute) - (startHour * 60 + startMinute);
if (durationMinutes < 0) {
durationMinutes += 24 * 60; // 翌日にまたがる場合
}
// const hours = Math.floor(durationMinutes / 60);
// const minutes = durationMinutes % 60;
return durationMinutes;
}
return text.replace(taskRegex, (match, prefix, startTime, endTime, _existing, _1, _2, taskDescription) => {
const duration = (${calculateDuration(startTime, endTime)});
const formattedPrefix = prefix || "";
return ${formattedPrefix}${startTime}-${endTime} ${duration} ${taskDescription};
});
}
// 現在のファイルの内容を取得
const text = editor.getText();
// 実績時間を追加
const result = formatTasks(text);
// 変更を適用
editor.setText(result);
// ユーザーに通知
// ui.hudSuccess("タスクのフォーマットを更新しました!");